💡 AI 인사이트

🤖 AI가 여기에 결과를 출력합니다...

댓글 커뮤니티

쿠팡이벤트

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

검색

    로딩 중이에요... 🐣

    [코담] 웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트

    12 앱 만들기 (2부) | ✅ 편저: 코담 운영자

    Django 튜토리얼 #12 - 앱 만들기 (2부)


    🔗 소스


    1. 강의 목표

    • 11강에서 작성한 모델과 폼을 기반으로 실제 CRUD 뷰 구현
    • 각 View 함수 정의 및 연결된 템플릿 구성
    • 제품 생성, 조회, 수정, 삭제 기능 완성

    2. 디렉토리 구조 재확인

    invApp/
    ├── templates/
    │   └── invApp/
    │       ├── home.html
    │       ├── layout.html
    │       ├── product_confirm_delete.html
    │       ├── product_form.html
    │       └── product_list.html
    ├── views.py
    ├── urls.py
    ├── forms.py
    ├── models.py
    ...
    

    3. CRUD 뷰 함수 구성 (invApp/views.py)

    11강에서 만든 모델과 폼을 활용하여 5가지 뷰 함수 구성: 홈, 생성, 조회, 수정, 삭제 각 함수는 다음과 같은 역할을 담당합니다:

    • home_view: 홈 화면 표시
    • product_create_view: 신규 상품 등록
    • product_list_view: 등록된 상품 전체 목록 출력
    • product_update_view: 특정 상품 수정
    • product_delete_view: 특정 상품 삭제 확인 및 실행

    11강에서 만든 모델과 폼을 활용하여 5가지 뷰 함수 구성: 홈, 생성, 조회, 수정, 삭제

    from django.shortcuts import render, redirect
    from .forms import ProductForm
    from .models import Product
    
    # 홈 화면 뷰
    def home_view(request):
        return render(request, 'invApp/home.html')
    
    # 제품 생성 뷰
    def product_create_view(request):
        form = ProductForm()
        if request.method == 'POST':
            form = ProductForm(request.POST)
            if form.is_valid():
                form.save()
                return redirect('product_list')
        return render(request, 'invApp/product_form.html', {'form': form})
    
    # 제품 목록 조회 뷰
    def product_list_view(request):
        products = Product.objects.all()
        return render(request, 'invApp/product_list.html', {'products': products})
    
    # 제품 수정 뷰
    def product_update_view(request, product_id):
        product = Product.objects.get(product_id=product_id)
        form = ProductForm(instance=product)
        if request.method == "POST":
            form = ProductForm(request.POST, instance=product)
            if form.is_valid():
                form.save()
                return redirect('product_list')
        return render(request, 'invApp/product_form.html', {'form': form})
    
    # 제품 삭제 뷰
    def product_delete_view(request, product_id):
        product = Product.objects.get(product_id=product_id)
        if request.method == 'POST':
            product.delete()
            return redirect('product_list')
        return render(request, 'invApp/product_confirm_delete.html', {'product': product})
    

    4. URL 패턴 구성 (invApp/urls.py)

    각 뷰와 연결되는 URL 경로 지정

    from django.urls import path
    from . import views
    
    urlpatterns = [
        path('', views.home_view, name="home"),
        path('create/', views.product_create_view, name="product_create"),
        path('list/', views.product_list_view, name="product_list"),
        path('update/<int:product_id>/', views.product_update_view, name="product_update"),
        path('delete/<int:product_id>/', views.product_delete_view, name="product_delete"),
    ]
    

    5. 템플릿 구성 요약 (invApp/templates/invApp/)

    • layout.html : 전체 레이아웃 공통 템플릿
    • home.html : 메인 페이지, 버튼과 소개 문구 포함
    • product_form.html : 제품 생성 및 수정에 사용되는 폼
    • product_list.html : 전체 제품 목록 테이블로 출력
    • product_confirm_delete.html : 삭제 확인 페이지

    6. 실습 정리

    사용자는 상품을 등록(Create)하고, 전체 목록을 조회(Read)하며, 개별 상품 정보를 수정(Update)하거나 삭제(Delete)할 수 있는 전반적인 CRUD 흐름을 실습을 통해 이해하게 됩니다.

    • CRUD 흐름 전체 구현 완료
    • 각 View는 forms.py와 models.py 기반으로 작동
    • Bootstrap 기반 템플릿으로 실제 동작 확인 가능

    다음 강의 예고

    • 13강에서는 UI 디자인 개선 및 Bootstrap 구성 요소를 활용해 더 보기 좋게 개선합니다.
    TOP
    preload preload